Organizarea registrelor.
Desi unii cercetatori sustin contrariul, practica a demonstrat utilitatea registrelor in imbunatatirea  performantelor microprocesoarelor. Ca exemplu se poate cita arhitectura procesoarelor RISC, unde se intilnesc zeci sau chiar 138 registre in componenta unitatii centrale de prelucrare.
Efectele pozitive ale utilizarii registrelor decurg din urmatoarele :
a) operatiile asupra continutului registrelor sint mai rapide        decit cele asupra operanzilor continuti in memorie, pentru        ca ALU are acces direct la registre. In felul acesta        rularea programelor poate fi accelerata prin pastrarea in        registre a datelor cu cea mai mare frecventa de utilizare.
b)lungimea medie a programelor scade, intrucit        instructiunile care manipuleaza operanzii aflati in        registre nu necesita o intreaga adresa, ci numai citiva        biti pentru specificarea registrului respectiv.
Pe de alta parte, continuturile registrelor (asa numitul context) trebuie salvate la aparitia unei intreruperi sau capcane sau atunci cind, in regim de multiprogramare, are loc comutarea programului curent (despre acest subiect se va discuta, pe larg, intr un capitol ulterior). In consecinta, un set numeros de registre conduce la timpi mai lungi de tratare a intreruperii sau de planificare a taskurilor.

1.1.Principalele operatii ale unitatii centrale de prelucrare
Cele mai frecvente operatii efectuate de catre CPU sint transferul de date si evaluarea de expresii. Practic toate limbajele algoritmice, cum sint C, Pascal, Fortran, poseda declaratii de asignare si declaratii de control al fluxului comenzilor (if, while, for etc.). Asignarea presupune, in general, evaluarea unei expresii si asignarea rezultatului unei variabile. Declaratiile de control al fluxului comenzilor implica evaluarea unui predicat si un salt, in functie de valoarea predicatului, la unul din mai multele blocuri de instructiuni specificate.
Forma obisnuita de scriere a expresiilor, de exemplu:
( A + B ) * ( (C + D) / ( E   F ) )
nu se preteaza la evaluarea directa, deoarece ordinea in care se executa operatiile nu coincide cu ordinea de aparitie a lor in secventa de operatie. Din acest motiv compilatorul reordoneaza expresia pentru a fi mai adecvata din punctul de vedere al generarii codului. Se foloseste notatia numita "reverse polish", conform careia un operator se aplica celor doi operanzi aflati imediat la stinga sa. Cu aceasta notatie expresia din exemplul dat devine : 
( (A B +) ((C D +)(E F  )/)*)
Pentru stocarea operanzilor pe durata evaluarii unei expresii se pare ca stiva constituie cea mai adecvata structura de date. Etapele sint inlantuite intro secventa al carei rezultat final este valoarea expresiei, stiva raminind in starea anterioara inceperii evaluarii expresiei. Pentru o instructiune cu n operanzi toate operatiile aritmetice sint efectuate asupra celor n elemente din virful stivei. Acest mod de evaluare a expresiilor a generat sugestii pentru organizare a registrelor care sa ofere un bun suport operatiilor cu structuri de tip stiva.

1.2. Masini cu arhitectura de tip stiva
Ideea care a stat la baza masinilor cu arhitectura de tip stiva (stack machines) consta in organizarea registrelor pentru a memora si gestiona automat partea superioara a stivei de evaluare. Instructiunile unei masini de tip stack machine ideala opereaza doar asupra registrelor ce contin virful stivei, cu exceptia instructiunilor de transfer de date, care citesc/inscriu registrul din virful stivei in/din  memorie. Intrucit stiva poate creste peste capacitatea de memorare oferita de registre, partea inferioara a stivei este pastrata in memorie. Acest fapt necesita existenta unor mecanisme pentru tratarea situatiilor cind virful stivei depaseste partea continuta in registre (register overflow: toate registrele incarcate, apare necesitatea inscrierii unui nou operand in stiva) sau cind virful stivei coboara sub partea ce ar putea fi continuta in registre (register underflow: toate registrele vide, apare necesitatea citirii unui operand din stiva). 
Practica nu ofera prea multe exemple de masina de tip stack machine. Majoritatea acestora au fost construite pentru functii specializate, asa cum sint procesoarele matematice. Ca exemplu se poate da procesorul matematic 80287 al familiei iAPX286, ale carui registre interne constituie o mica stiva. In acelasi timp setul de instructiuni al procesorului 80287 contine si instructiuni destinate operatiilor implicind operandul din virful stivei si un operand continut in oricare alt registru. Ca procesor de uz general de tipul stack machine se poate cita transputerul elaborat de catre firma INMOS.  Conceptul de stack machine este rar utilizat in practica, dar el s a dovedit util in crearea de masini abstracte, folosite ca masini intermediare pentru generarea codului masina, problema ce face obiectul preocuparilor celor ce studiaza si realizeaza compilatoare.
1.3. Masini cu acumulator
Majoritatea microprocesoarelor din prima generatie sint masini cu acumulator, care foloseau un registru sau un mic numar de registre pentru prelucrarea datelor. In astfel de masini, un registru, numit acumulator, contine unul din operanzi si, in acelasi timp este folosit pentru a stoca rezultatul operatiei. Masinile cu acumulator poseda moduri simple de adresare, ceea ce nu ofera suficiente facilitati pentru limbajele de nivel inalt, care necesita  determinarea in timpul rularii a adreselor in memorie ale unor variabile, deci nu se poate concepe determinarea acestora de catre compilator si fixarea in codul generat a valorilor gasite. Functia de baza a acumulatorului era aceea de a servi ca virf al stivei de evaluare, intrucit el constituie un operand al tuturor instructiunilor de prelucrare. 
1.4. Masini cu registre index
Arhitecturile cu registre index au reprezentat un progres notabil fata de cele cu acumulator, intrucit permit evaluarea in timpul rularii a adreselor. Registrul index contine un numar care, prin adunarea cu o valoare continuta in codul instructiunii, permite determinarea adresei complete a operandului. O varianta o constituie registrele baza.
De multe ori aceeasi masina contine ambele tipuri de registre. Adresa operandului se determina adunind continutul registrului baza cu cel al registrului index si cu un offset continut intr un cimp al instructiunii. iAPX 286 constituie un exemplu reprezentativ. Acest microprocesor dispune de registre index, baza si de segment, folosite la evaluarea adreselor.
Introducerea registrului index scurteaza lungimea instructiunii deoarece, in locul unei adrese complete, corpul acesteia poate contine doar un offset exprimat pe un numar mai mic de biti, la care se adauga un mic cimp pentru specificarea registrului index (in situatia ca microprocesorul dispune de mai multe astfel de registre).
1.5.Organizarea registrelor de uz general
Numeroase microprocesoare dispun de un set de registre interne care se pot utiliza pentru toate functiile posibile, intrucit toate instructiunile pot folosi orice registru, indiferent de numele acestuia (cu exceptia unui mic numar de registre destinate comenzii microprocesorului). Se spune ca aceste masini au un set ortogonal de instructiuni si un fisier de registre. Fiecarui registru ii poate reveni una din urmatoarele functii:
-acumulator,cind este utilizat pentru evaluarea de expresii;
-index/baza: orice registru poate fi desemnat ca registru baza sau registru index, utilizat la determinarea adresei operandului. Deci, orice registru poate stoca informatii de tipul indicatorului cadrului sau element din cimpul de afisare;
-indicator al variabilei: registrul este folosit pentru memorarea adresei sau este utilizat pentru explorarea unei date de lungime mare, cum este sirul de caractere;
-indicator de stiva: registrul permite implementarea mecanismului de stiva;
-registru de comanda: registrul contine informatii de comanda a microprocesorului. Este cazul unui registru de uz general care contine contorul programului.
Ortogonalitatea intre fisierul de registre si setul de instructiuni trebuie privita ca suport pentru executia eficienta a programelor scrise in limbaje de nivel inalt, intrucit simplifica optimizarea utilizarii de catre compilator a registrelor pe durata fazei de generare a codului. Asa cum s a aratat [5], optimizarea se face mai usor fie cind exista mai putine variante, fie cind acestea sint uniforme. Ortogonalitatea este o noua contributie in favoarea uniformitatii si permite sa partajeze dinamic setul de registre intre diferitele functii, cum sint acumulatoare, registre baza, registre index, cu scopul satisfacerii cerintelor diverse ale programelor. Acesta este motivul pentru care piata actuala cunoaste o ampla raspindire a microprocesoarelor cu organizarea de tip general a registrelor, desi exista unele exceptii notabile. 
Lungimea medie a instructiunii pentru tipul de organizare mentionat este mica, fapt datorat posibilitatii de a pastra in registre un numar mai mare de operanzi fata de alte structuri, iar specificarea unui registru ocupa mai putin spatiu in codul instructiunii comparativ cu specificarea unei adrese. Afirmatia este sustinuta si de disponibilitatea registrelor baza si index pentru stocarea adreselor de memorie. Pentru programele scrise in limbaje de nivel inalt multe variabile au adrese alocate dinamic, in timpul rularii, ceea ce impune necesitatea pastrarii lor in registre. 
Desi mai putin evidenta la prima vedere, includerea unitatilor de prelucrare a numerelor cu virgula mobila (FPU) in clasa microprocesoarelor este o necesitate. Chiar daca ele executa operatii specializate, caracteristicile arhitecturale si programabilitatea justifica numele de microprocesor. Unele procesoare matematice au registrele organizate similar cu cele unitatii centrale de prelucrare in conjunctie cu care opereaza si, mai mult, pot avea fisierul de registre considerat ca o prelungire logica a fisierului de registre al unitatii centrale,cu care au comun chiar setul de instructiuni (cu exceptia celor pentru operatii aritmetice cu numere in formatul cu virgula mobila).

1.6.Masini fara registre
Arhitecturile cu registre nu au doar avantajele unui cod mai compact si performante mai bune in anumite imprejurari, ci si dezavantajul creat de necesitatea unor operatii, consumatoare de timp, pentru salvarea contextului cind se face comutarea la un alt program. Mai delicata este problema in structurile multiprocesor, in care apare pericolul ca datele folosite in comun de programe rulind pe microprocesoare diferite sa fie comparate in registrele unei unei CPU, unde sa fie si modificate. Intrucit registrele nu sint accesibile dispozitivelor exterioare, modificarile nu sint vizibile de catre alte CPU.
In arhitecturile cu registre aceste probleme se solutioneaza fie prin intermediul unor instructiuni speciale, destinate manipularii datelor critice, fie prin unele particularitati de limbaj, care permit compilatorului identificarea variabilelor care nu pot fi copiate sau manipulate in registre. De aceea exista o serie de propuneri si chiar implementari de microprocesoare fara registre. Avantajele (comutarea rapida a contextului si eliminarea problemelor conexe variabilelor folosite in comun) le recomanda pentru folosirea in configuratii multiprocesor. iAPX432, familie ce va fi prezentata intr un capitol ulterior, este un reprezentant tipic al acestei generatii de masini. Dintre dezavantaje sint de mentionat cresterea lungimii medii a instructiunii, precum si cresterea duratei medii de executie a unei instructiuni.
1.7.Influenta registrelor asupra compactitatii codului
Organizarea registrelor influenteaza lungimea medie a unei instructiuni. Cele doua cazuri extreme sint: masina fara registre si masina cu organizare de tip stiva. Prima clasa necesita specificarea   in cel mai nefavorabil caz   a unui numar de trei adrese. Cea de a doua clasa necesita specificarea de adrese doar pentru operatiile de acces la memorie. Intre cele doua extreme eista mai multe clase intermediare (masini cu o adresa deci cu acumulator fix, sau cu doua adrese).
Pentru evaluarea compactitatii codului mai sint de considerat si alti factori, intre care numarul de instructiuni necesar pentru a efectua o anumita operatie.
O comparatie intre parametrii de executie pe diverse tipuri de masini evidentiaza dezavantajele tipice ale masinii cu acumulator, care necesita un numar mai mare de operatii de acces  la memorie (consumatoare de timp), consecinta a numarului mic de registre. Programul masinii cu organizarea bazata pe stiva este mai compact, dar masina cu registre de uz general poate emula comportamentul masinii cu stiva fara a consuma un numar superior de instructiuni.
